import pandas as pd
from datetime import datetime
import numpy as np
from datetime import datetime, timedelta


def generate_dynamic_coordinates(start_lon, start_lat, segments):
    """
    生成三段都会变化的经纬度坐标点

    参数:
        start_lon: 起始经度
        start_lat: 起始纬度
        segments: 包含各段参数的列表，每段格式为:
            {
                'lon_change': 经度变化量,
                'lat_change': 纬度变化量,
                'heading': 艏向角,
                'num_points': 该段点数
            }

    返回:
        包含经度、纬度、艏向角和时间戳的DataFrame
    """
    # 初始化数组
    lons = []
    lats = []
    headings = []

    current_lon = start_lon
    current_lat = start_lat

    # 生成各段坐标点
    for segment in segments:
        lon_inc = segment['lon_change'] / segment['num_points']
        lat_inc = segment['lat_change'] / segment['num_points']

        # 生成该段的每个点
        for i in range(segment['num_points']):
            current_lon += lon_inc
            current_lat += lat_inc

            lons.append(current_lon)
            lats.append(current_lat)
            headings.append(segment['heading'])

    # 生成时间戳 (假设每秒一个点)
    start_time = datetime.now()
    timestamps = []
    for i in range(len(lons)):
        timestamps.append((start_time + timedelta(seconds=i)).strftime("%Y-%m-%d %H:%M:%S"))

    # 创建DataFrame
    df = pd.DataFrame({
        "经度（lon）": lons,
        "纬度（lat）": lats,
        "艏向角（heading）": headings,
        "时间戳（timestamp）": timestamps
    })

    return df


# 示例使用
if __name__ == "__main__":
    # 参数设置 (根据图一的折线形状)
    start_lon = 112.0  # 起始经度
    start_lat = 20.0  # 起始纬度

    # 定义三段移动参数 (右下方->上方->右下方)
    segments = [
        {  # 第一段: 右下方移动
            'lon_change': 2,  # 经度增加
            'lat_change': -2,  # 纬度减少
            'heading': 135,  # 东南方向
            'num_points': 20
        },
        {  # 第二段: 上方移动
            'lon_change': -1.5,  # 经度略微减少
            'lat_change': 3,  # 纬度增加
            'heading': -45,  #
            'num_points': 20
        },
        {  # 第三段: 右下方移动
            'lon_change': 2,  # 经度增加
            'lat_change': -1,  # 纬度减少
            'heading': 120,  # 东偏南方向
            'num_points': 20
        }
    ]

    # 生成坐标点
    df = generate_dynamic_coordinates(start_lon, start_lat, segments)
    # 生成时间戳（格式示例：20250701_153045）
    # timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    #
    # # 拼接文件名
    # filename = f"coordinates_{timestamp}.xlsx"
    # 保存为xlsx文件 (按照图二的格式)
    df.to_excel("dynamic_coordinates.xlsx", index=False,
                columns=["经度（lon）", "纬度（lat）", "艏向角（heading）", "时间戳（timestamp）"])

    print("动态坐标点已成功生成并保存为 dynamic_coordinates.xlsx")